Optional Class has different Methods for creating, reading, transforming and analyzing its Instances.
Optional Methods
import java.util.Optional;
public class Test {
public static void main(String args[]) throws Exception {
//DECLARE OTPIONAL.
Optional<String> emptyString = Optional.empty(); //Create Optional that is empty
Optional<Integer> emptyInteger = Optional.empty(); //Create Optional that is empty
Optional<String> string = Optional.of("John"); //Create Optional that contains String
Optional<Integer> integer = Optional.of(new Integer(20)); //Create Optional that contains Integer
Optional<String> canBeNull = Optional.ofNullable("John"); //Create Optional with or without Object
Optional<String> nullOptional = Optional.ofNullable(null); //Create Optional with or without Object
//If Optional has Object return Object. Otherwise throws Exception.
String name1 = string .get();
//String nameEmpty = empty.get();
//If Optional has Object return Object. Otherwise return specified default value.
String name = string .orElse("unknown");
String nameEmpty = emptyString .orElse("unknown");
//If Optional has Object return Object. Otherwise return value returned by provided handler.
Integer age = integer .orElseGet(() -> { return 0; });
Integer ageEmpty = emptyInteger.orElseGet(() -> { return 0; });
//If Optional has Object return Object. Otherwise throw custom Exception.
Integer age2 = integer .orElseThrow( () -> { return new Exception("No value"); } );
//Integer ageEmpty2 = emptyInteger.orElseThrow( () -> { return new Exception("No value"); } );
//If Optional has Object return true. Otherwise return false.
boolean hasName1 = string .isPresent(); //true
boolean hasName2 = emptyString .isPresent(); //false
//If Optional has Object execute Handler that returns no value. Otherwise do nothing.
string.ifPresent( (value) -> { System.out.println("Value found - " + value); });
//Execute provided handler if Optional contains Object. Otherwise returns empty Optional.
//If handler returns true, filter() returns that same Optional. Otherwise returns empty Optional.
Optional<Integer> result1 = integer.filter( value -> {
if (value == 20) { return true; } //Optional[20]
else { return false; } //Optional.empty
});
//Returns Optional with a Value returned by handler.
Optional<Object> result2 = string.map( value -> {
return Optional.of("Your name is " + value); //Optional[Optional[Your name is John]]
});
//Returns Optional with a Value returned by handler.
//If handler would return Optional, its value is first taken out before returnig final Optional.
//Returns Optional<String> instead of Optional<Optional<String>>.
Optional<String> result3 = string.flatMap( value -> {
return Optional.of("Your name is " + value); //Optional[Your name is John]
});